Ich hab mal einen etwas älteren Schnipsel Quelltext bezüglich Wikipedia aufgetrieben. =) (Sorry für das lange Warten, aber wenn man erst eine miese Seminarwoche mitmacht und sich dabei dann auch noch erkältet, hat man wohl Ausreden genug zusammen. ^^)
Das Einlesen von Wikipedia geschieht timergesteuert immer mal wieder. (In der Version, aus der der Quelltext stammt, alle fünf Sekunden.)
Es wird nicht nach einem bestimmten Artikel gesucht, was für ein späteres Stadium sicherlich interessant wäre (man fragt zum Beispiel etwas zu irgendeinem Thema, der Bot hat keine Ahnung und stellt daher erstmal kurze Recherchen an, und spuckt dann in Sekundenschnelle eine perfekte Antwort auf eine Frage aus, die er selbst zuvor noch nicht kannte... tjaja, Utopien sind toll. ^^), sondern erstmal nur ein zufälliger Artikel gewählt. Der Sinn des ganzen ist es, weniger Nutzereingaben machen zu müssen, um dem Bot Syntax und Vokabular der jeweiligen Sprache sowie einige Zusammenhänge klarzumachen, und das ganze eher automatisiert ablaufen zu lassen. Wer hat schon Lust, auf seinen Bot wie auf ein kleines Kind jahrelang einzureden, nur damit der nach sechs Jahren Arbeit im Bestfall reif für die Grundschule ist?
Um Nutzereingaben in dieser frühen Phase, die für den Nutzer allenfalls frustrierend ist, da halt noch nicht allzu viel sinnvolles ausgegeben wird, aber trotzdem stets sinnvolle Dinge eingegeben werden müssen, in der vagen Hoffnung, dass der Geist in der Maschine irgendwann mal etwas davon versteht, noch weiter herabsetzen zu können, ist auch die Möglichkeit denkbar, nicht nur zufällige Artikel von Wikipedia einzulesen, sondern das ganze beispielsweise auch mit jeder Literatur von Kurzgeschichten bis hin zu Romanen zu füttern.
Doch wie funktioniert nun dieses unglaublich umwerfende, da unheimlich überschaubare Quelltextstückchen von sechs Zeilen?
Bei GetWikiArticle; wird zunächst ein zufälliger Artikel von Wikipedia heruntergeladen, sowie in eine lesbare Form gebracht (was meistens zur Folge hat, dass 90% geschnitten werden, aber dazu später mehr).
Anschließend wird das Memo, das normalerweise die Nutzereingaben annimmt, mit dem resultierenden Text gefüllt, und schließlich, <tadaa!>, wird der Text eingelesen - mit dem Parameter 'wiki', damit der Bot weiß, dass das von Wikipedia stammt, und nicht aus der Feder des Nutzers.
Nun gehen wir mal Hals über Kopf direkt in die Prozedur:
Man nehme ein paar langweilige und nicht weiter erwähnenswerte da vollkommen unaussagekräftige Variablen- und Sprungzieldeklarationen...
... gehe sicher, dass für den Notfall - wie auch immer dieser aussehen mag - irgendeine Form von Rettung in Sicht ist, wobei diese vorher auf false gesetzt wird, damit sie von vorn zu zählen anfängt, bis sie losretten soll...
... werde sich darüber klar, dass es bei einem bereits bestehenden Problem definitiv nicht der richtige Zeitpunkt ist, um ein bisschen auf Wikipedia herumzulesen...
... lade dann in freudiger Erwartung einen zufälligen Artikel als HTML-Datei von Wikipedia direkt in ein jungfräuliches Memo...
... ersetze das ein- oder andere kryptische Zeichen, dass einem dabei wohl über den Weg laufen mag, durch ein sehr viel tolleres Zeichen...
... ignoriere jede Form von Textformatierung, da die unser Bot sowieso nicht lesen kann - außer den Absätzen, die sind natürlich gaaanz wichtig - indem man alles, was zwischen „<“ und „>“ steht, wegfallen lässt, wobei man stets darauf achtet, bei einem Problem nicht auch noch weiterzumachen...
... setze in einem Anfall von purem Optimismus das Ausgabememo dieser Prozedur schon mal auf den bisherigen Zwischenwert...
... überprüfe, ob es sich bei der Seite nur um eine Begriffsunterscheidungsseite handelt, was uns nicht wirklich gefiele, da man auf einer solchen Seite nicht allzuviel lernt, weswegen wir in diesem Fall zum Laden eines anderen zufälligen Artikels zurückspringen...
... schneide alles ab, was über dem magischen String „Wechseln zu: Navigation, Suche“ liegt, sollte dieser vorkommen...
... überprüfe, weil es so schön ist, glatt nochmal, ob nicht inzwischen woanders im Programm ein Problem aufgetaucht sein könnte, was uns davon abhält, hier weiterzumachen...
... nehme alle Zeilen heraus, die ein [Bearbeiten] zu Anfang haben, weil die eh Mist sind und nur Überschriften, und Überschriften stören unseren Bot nur, sowie alle Zeilen, die leer sind, und sowieso alle Zeilen, die nach gewissen Schlüsselstrings kommen, da danach stets nur Listen kommen, die unserem Bot auch nicht helfen, die Sprache besser zu erlernen ...
... schaue nochmal, ob wir nicht eine vergessen haben - geht ja schnell mal im Eifer des Gefechts =) ...
... fülle den Text nochmal vom Memo in den String um und wieder zurück, um überflüssige Zeilen zu eliminieren und weils halt so viel Spaß macht...
... nehme dabei dann noch allen Text, der vor dem Inhaltsverzeichnis vorhanden ist, falls denn eins vorhanden ist...
... sowie allen Text danach, denn das Inhaltsverzeichnis selbst brauchen wir ja nicht, da wir ja den Inhalt haben...
... man kennt es schon ^^ ...
... kürze noch schnell alles, was in eckigen Klammern steht, denn Dinge in eckigen Klammern sind nie wichtig und meistens nur Angaben zu den Quellen, die unseren Bot herzlich überhaupt nicht interessieren...
... bringe die Angabe über Geburtstag und Todestag, sofern es sich bei dem Artikel um einen handelt, der sich um eine Person dreht, in eine botlesbare Form...
... lösche noch ein paar Leerzeichen, die bei den zurückliegenden radikalen Ausschneideaktionen zurückgeblieben sind und den lieben Bot nur stören würden...
... lösche die erste Zeile, sofern sie kein Satzzeichen enthält, weil die erste Zeile sowieso langweilig ist und in dem speziellen Fall sicherlich eher eine Überschrift als einen Satz darstellt, aus dem der Bot etwas Sinnvolles erfahren könnte...
... und freue sich schließlich, dass man ans Ende gelangt ist, was man auch gleich dem ganzen Rest des Programms mitteilt, indem man die Notfallrettung abbestellt und Probleme als nichtexistent bezeichnet.
Ich denke, man versteht nun einigermaßen, wieso gefühlte 90% eines jeden Artikels gelöscht werden: Überschriften werden nicht gebraucht, Inhaltsverzeichnisse auch nicht, jedwede Art von Liste ist für das Lernen der Sprache nicht so geeignet wie vernünftige Sätze und wird gelöscht und schließlich fallen auch alle Texthervorhebungen weg.
Somit sind wir nun an dem Punkt, dass unser Bot einen kurzen, knappen Text geschickt bekommt, der vor Sinn und Syntax sowie Vokabular nur so strotzt und ihm hoffentlich in ganz kurzer Zeit das Sprechen beibringt.
Vielen Dank für Ihre Aufmerksamkeit, ich bin Moyaccercchi, und Sie lasen einen Artikel zu Skippy, dem Buschkänguru der künstlichen Intelligenz.
Geändert von Moyaccercchi (17.01.2010 um 17:00 Uhr)